<?php session_start();
include("../config.php");
require_once("cLogin.php");
require_once("cResultado.php");
require_once("PHPLogger.php");
require_once("MisPuntos.php");
$LOGGER = new PHPLogger(LOGGER_PATH, LOGGER_LEVEL);
$LOGIN = unserialize($_SESSION['loginClass']);
class BykomCliente_byk{

	function getResultado($mysqli) {
		if ($rs = $mysqli->store_result()) {
       		if($rs->num_rows >0) {
    			$i=0;
				while ($finfo = $rs->fetch_field()) {
              	$campos[$finfo->name]=$i;
              	$i++;
				}
				while ($row = $rs->fetch_row()) $vec[] = $row;
				$rs->free_result();
				return new cResultado($campos, $vec);
       		}
			$mysqli->close();
		}
		return new cResultado();
	}
	
  //persiste un objeto del tipo "MisPuntos" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	function PersistirPunto($Punto,$oldGrupo){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	    if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirPunto' " .  mysqli_connect_error() );
		   	$Punto->id=-1;
	       	return ($Punto);
	    }
	 	if (($Punto->id=='')||($Punto->id==null)){ //ES UN INSERT
	 		$SQL = "INSERT INTO bykom.`pumapuntos` (`NOMBRE`, `LATITUD`, `LONGITUD`, `DATOS`, `FLOTA_ID`, `ICONO`,`TOLERANCIA`) ";
			$SQL .= "VALUES ('$Punto->nombre', '$Punto->latitud', '$Punto->longitud', '$Punto->datos', $Punto->flotaId, $Punto->icono,$Punto->tolerancia);";
	 	}else{
		 	$SQL = "UPDATE bykom.`pumapuntos` SET ";
			$SQL .= "bykom.pumapuntos.`NOMBRE`='$Punto->nombre', ";
			$SQL .= "bykom.pumapuntos.`LATITUD`='$Punto->latitud', ";
			$SQL .= "bykom.pumapuntos.`LONGITUD`='$Punto->longitud', ";
			$SQL .= "bykom.pumapuntos.`DATOS`='$Punto->datos', ";
			$SQL .= "bykom.pumapuntos.`ICONO`=$Punto->icono, ";
			$SQL .= "bykom.pumapuntos.`TOLERANCIA`=$Punto->tolerancia ";
			$SQL .= " WHERE bykom.pumapuntos.`ORDER_ID` = $Punto->id";
		}

	 	$mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     	if (!$mysqli->real_query($SQL)){
	   		$LOGGER->addLine('ERROR',"FUNCION: 'PersistirPunto' " .  $mysqli->error.' CONSULTA: '.$SQL);
       		$mysqli->real_query("ROLLBACK");
	   		$Punto->id=-1;
       		return ($Punto);
     	}
	 	if (($Punto->id=='')||($Punto->id==null)){ //fue un insert
	 		$Punto->id=$mysqli->insert_id;
		}
		//AHORA DEBO PERSISTIR LA RELACION GRUPO-PUNTO
		if ((int)$oldGrupo!=(int)$Punto->grupoId){
	 		if((int)$oldGrupo!=0){
				$SQL = "DELETE FROM bykom.grupo_punto WHERE bykom.grupo_punto.GRUPO_ID = $oldGrupo and bykom.grupo_punto.PUNTO_ID = $Punto->id;";
				if (!$mysqli->real_query($SQL)){
				 	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirPunto' " .  $mysqli->error.' CONSULTA: '.$SQL);
	      		 	$mysqli->real_query("ROLLBACK");
		  		 	$Punto->id=-1;
	      		 	return ($Punto);
	     		}
			}else if((int)$Punto->grupoId!=0){
	 			$SQL = "INSERT INTO bykom.`grupo_punto` (`GRUPO_ID`, `PUNTO_ID`) VALUES ($Punto->grupoId, $Punto->id);";
	 			if (!$mysqli->real_query($SQL)){
			 		$LOGGER->addLine('ERROR',"FUNCION: 'PersistirPunto' " .  $mysqli->error.' CONSULTA: '.$SQL);
      		 		$mysqli->real_query("ROLLBACK");
	  		 		$Punto->id=-1;
      		 		return ($Punto);
     			}
			}
	 	}
	 	$mysqli->real_query("COMMIT");
	 	$mysqli->close();
     	return ($Punto);
	}
	/**
	 * 
	 * siendo clienteID el id de una flota o bien el Id de un Movil
	 * @param int $clienteId
	 * @param int $objetivo
	 */
	function Puntos_Cliente($clienteId, $objetivo){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Puntos_Cliente' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
      		exit();
     	}
	 	$SQL = "SELECT pumapuntos.`ORDER_ID`,
	        pumapuntos.`LATITUD`,
	        pumapuntos.`LONGITUD`,
	        pumapuntos.`NOMBRE`,
	        pumapuntos.`ICONO`,
	        pumapuntos.`DATOS`,
	        pumapuntos.`FLOTA_ID`,
	        pumapuntos.`TOLERANCIA`,
	        Grupo.`ORDER_ID` AS GRUPO
	        FROM pumapuntos
            LEFT JOIN `pumagrupos` Grupo 
            	ON pumapuntos.`FLOTA_ID` = Grupo.`FLOTA_ID` 
            	AND Grupo.`ORDER_ID` IN (SELECT grupo_punto.`GRUPO_ID`
                                     FROM grupo_punto
                                     WHERE grupo_punto.`PUNTO_ID` = pumapuntos.`ORDER_ID`)
	        WHERE pumapuntos.`FLOTA_ID` = $clienteId
	        ORDER BY NOMBRE ";

		if (!$mysqli->real_query($SQL)){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Puntos_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
	       	exit();
	    }
	    return BykomCliente_byk::getResultado($mysqli);
	}
	/**
	 * 
	 * elimina todos los puntos de la base de datos que esten en el array de Ids y retorna True en caso de exito
	 * @param string $Ids
	 * @param int $cuentaId
	 * @param int $objetivo
	 */
	function EliminarPuntos($Ids,$cuentaId,$objetivo){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarPuntos' " . mysqli_connect_error() );
	    	return (false);
	    }
	     //EJECUTO EL PRIMER QUERY
	 	$mysqli->real_query("BEGIN");
		if (($Ids!=null)&&($Ids!='')){
		 	$SQL = "DELETE FROM pumapuntos WHERE pumapuntos.`ORDER_ID` IN  (".implode(',',$Ids).")";
		}
	    if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarPuntos' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       return (false);
	    }

		if (($Ids!=null)&&($Ids!='')){
			$SQL = "DELETE FROM grupo_punto WHERE grupo_punto.`PUNTO_ID` IN  (".implode(',',$Ids).")";
		}
	    if (!$mysqli->real_query($SQL)){
		   	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarPuntos' " . $mysqli->error.' CONSULTA: '.$SQL);
		    $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       	return (false);
     	}
	 	$mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 	$mysqli->close();
     	return (true);
    }
	/**
	 * persiste un objeto del tipo "MisGrupos" en la base de datos y lo retorna con el nuevo ID o bien con un -1 
	 * como id si es que fallo al intentar realizar la operacion
	 */
	function PersistirGrupo($Grupo){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGrupo' " .  mysqli_connect_error() );
	   		$Grupo->id=-1;
       		return ($Grupo);
		}
		if (($Grupo->id=='')||($Grupo->id==null)){ //ES UN INSERT
	 		$SQL = "INSERT INTO `pumagrupos` (`NOMBRE`, `DATOS`, `FLOTA_ID` ) ";
			$SQL .= "VALUES ('$Grupo->nombre', '$Grupo->datos', $Grupo->flotaId);";
	 	}else{
 			$SQL = "UPDATE `pumagrupos` SET ";
			$SQL .= "pumagrupos.`NOMBRE`='$Grupo->nombre', ";
			$SQL .= "pumagrupos.`DATOS`='$Grupo->datos' ";
			$SQL .= " WHERE pumagrupos.`ORDER_ID` = $Grupo->id";
		}
	    if (!$mysqli->real_query($SQL)){
	   		$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGrupo' " .$mysqli->error.' CONSULTA: '.$SQL);
       		$Grupo->id=-1;
       		return ($Grupo);
     	}
	 	if (($Grupo->id=='')||($Grupo->id==null)) //fue un insert
	 		$Grupo->id=$mysqli->insert_id;
	 	$mysqli->close();
     	return ($Grupo);
    }
    /**
     * 
     * elimina todos los grupos y sus puntos de la base de datos que esten en el array de Ids y retorna True en caso de exito
     * @param string $Ids
     */
	function EliminarGrupos($Ids){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupos' " . mysqli_connect_error() );
       	return (false);
     }
	 if (($Ids!=null)&&($Ids!='')){
	 	$SQL = "DELETE FROM grupo_punto WHERE grupo_punto.`GRUPO_ID` IN  (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupos' " . $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }

	 if (($Ids!=null)&&($Ids!='')){
	 	$SQL = "DELETE FROM pumagrupos WHERE pumagrupos.`ORDER_ID` IN  (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupos' " . $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }
     return (true);
    }
	/**********************************************************************/
    /**
     * 
     * siendo clienteID el id de una flota
     * @param int $clienteId
     */
    function Grupos_Cliente($clienteId){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Grupos_Cliente' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
 		$SQL = "select 
 				pumagrupos.`ORDER_ID`,
		        pumagrupos.`NOMBRE`,
		        pumagrupos.`DATOS`,
		        pumagrupos.`FLOTA_ID`,
		        3 as ESFLOTA
		        from pumagrupos
		        where pumagrupos.`FLOTA_ID` = $clienteId		             
		        ORDER BY NOMBRE";
      	//$SQL = "call z_Grupos_Cliente('$clienteId','$esFlota')";
     	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR',"FUNCION: 'Grupos_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
			exit();
     	}
     	return BykomCliente_byk::getResultado($mysqli);
    }
    /**
     * 
     * marca todos los puntos que esten en el array de Ids como seguro/inseguro y retorna True en caso de exito
     * @param string $Ids
     * @param int $seguro
     */
	function SeguroPuntos($Ids, $seguro){
	 	global $LOGGER;
	 	/*$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
		if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'SeguroPuntos' " . mysqli_connect_error() );
	       	return (false);
     	}*/
		 $value=0;
		 if ($seguro)
		 	$value=1;
	     /*if (mysqli_connect_errno()){
	       return (-1);
	     }
		 if (($Ids!=null)&&($Ids!='')){
		 	$SQL = "UPDATE `pumapuntos` SET pumapuntos.`SEGURO`=$value WHERE pumapuntos.`ORDER_ID` IN (".implode(',',$Ids).")";
		 }

	     if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'SeguroPuntos' " .$mysqli->error.' CONSULTA: '.$SQL);
	       return (-1);
	     }*/
	     return ($value);
    }
	// FUNCIONES PARA ZONAS!!!!!
	/**********************************************************************/
	 //siendo clienteID el id de una flota o bien el Id de un Movil
	function Zonas_Cliente($clienteId, $esFlota){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Zonas_Cliente' " . mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
    	$SQL = "select pomapoligonos.`ORDER_ID`,
				pomapoligonos.`NOMBRE`,
				pomapoligonos.`DATOS`,
				pomapoligonos.`COLOR`,
				pomapoligonos.`TOLERANCIA`,
				3 as ESFLOTA,
				0 as PUBLICO,
    			$clienteId as FLOTA_ID
				from pomapoligonos
				where `pomapoligonos`.`TIPO` = 1
		        ORDER BY ORDER_ID ";
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'Zonas_Cliente' " .$mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
    	 return BykomCliente_byk::getResultado($mysqli);
    }

 	//Retorna todos los puntos de una zona determinada
	function Puntos_Zona($zonaId){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Puntos_Zona' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	     }
	     $SQL = "select * from `porlpoligonos` where porlpoligonos.`ORDER_RL`=$zonaId ORDER BY ORDER_ID;";
	     if (!$mysqli->real_query($SQL)){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Puntos_Zona' " .$mysqli->error.' CONSULTA: '.$SQL);
	     	exit();
	     }
	     return BykomCliente_byk::getResultado($mysqli);
    }
    /**
     * persiste un objeto del tipo "MisZonas" en la base de datos y lo retorna con el nuevo ID o bien con un -1 
     * como id si es que fallo al intentar realizar la operacion
     * @param Zona $Zona
     */
    function PersistirZona($Zona){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirZona' " . mysqli_connect_error() );
		   	$Zona->id=-1;
	       	return ($Zona);
	     }
		 //POMAPOLIGONOS
		 $SQL = "";
		 $colorDec = hexdec($Zona->color); //convertimos el color de HEXA a DECIMAL
		 if (($Zona->id=='')||($Zona->id==null)){ //ES UN INSERT
			//inserto en POMAPOLIGONOS
		 	$SQL = "INSERT INTO `pomapoligonos` (`NOMBRE`, `DATOS`, `COLOR`, `TIPO`,`TOLERANCIA`) ";
			$SQL .= "VALUES ('$Zona->nombre', '$Zona->datos', $colorDec, 1,$Zona->tolerancia);";
		 } else{
		 	$SQL = "UPDATE `pomapoligonos` SET ";
			$SQL .= "pomapoligonos.`NOMBRE`='$Zona->nombre', ";
			$SQL .= "pomapoligonos.`DATOS`='$Zona->datos', ";
			$SQL .= "pomapoligonos.`COLOR`=$colorDec, ";
			$SQL .= "pomapoligonos.`TOLERANCIA`=$Zona->tolerancia ";
			$SQL .= " WHERE pomapoligonos.`ORDER_ID` = $Zona->id";
		 }
	
		 //EJECUTO EL PRIMER QUERY
		 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
	     if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirZona' " .$mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $Zona->id=-1;
	       return ($Zona);
	     }
		 if (($Zona->id=='')||($Zona->id==null)) //fue un insert
		 	$Zona->id=$mysqli->insert_id;
	
		 //PUMAPUNTOS
		 $SQL = "DELETE FROM `porlpoligonos` WHERE porlpoligonos.`ORDER_RL`=$Zona->id";
		 if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirZona' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $Zona->id=-1;
	       return ($Zona);
	     }
		 $SQL = "INSERT INTO `porlpoligonos` (`ORDER_RL`, `LATITUD`, `LONGITUD`) VALUES ";
		 for ($i=0; $i<$Zona->cantidadPuntos(); $i++){
		    $lat = $Zona->PUNTOSLAT[$i];
			$lng = $Zona->PUNTOSLNG[$i];
			$SQL .= "($Zona->id, '$lat', '$lng')";
			if ($i<$Zona->cantidadPuntos()-1)
				$SQL.=",";
		 }
		 $SQL.=";";
		 if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirZona' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $Zona->id=-1;
	       return ($Zona);
	     }
	
		 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA => PERSISTO LOS CAMBIOS
		 $mysqli->close();
	     return ($Zona);
    }
 	
    function EliminarZonas($Ids,$cuentaId,$objetivo){ //elimina todas las zonas de la base de datos que esten en el array de Ids y retorna True en caso de exito
		global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'EliminarZonas' " . mysqli_connect_error() );
     	  	return (false);
     	}
	 	if (($Ids!=null)and($Ids!='')){
	 		$SQL = "DELETE FROM porlpoligonos WHERE porlpoligonos.`ORDER_RL` IN  (".implode(',',$Ids).")";
	 	}
	 	$mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     	if (!$mysqli->real_query($SQL)){
	 	  $LOGGER->addLine('ERROR',"FUNCION: 'EliminarZonas' " . $mysqli->error.' CONSULTA: '.$SQL);
	 	  $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
     	  return (false);
     	}
		if(($Ids!=null)and($Ids!='')){
	 		$SQL = "DELETE FROM pomapoligonos WHERE pomapoligonos.`ORDER_ID` IN  (".implode(',',$Ids).") AND pomapoligonos.TIPO = 1";
	 	}
	 	if(!$mysqli->real_query($SQL)){
	   		$LOGGER->addLine('ERROR',"FUNCION: 'EliminarZonas' " . $mysqli->error.' CONSULTA: '.$SQL);
	   		$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       		return (false);
     	}
		$mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
		$mysqli->close();
	    return (true);
    }
    
	// FUNCIONES PARA RUTAS!!!!!
	/**********************************************************************/
	function getMisRutas($cuentaId, $objetivo){
	 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'getMisRutas' " . mysqli_connect_error());
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	     }
	      $SQL = "SELECT `ORDER_ID` as id,
	      				`NOMBRE` as nombre,
	      				`DATOS` as descripcion,
	      				`COLOR` as color,
	      				`TOLERANCIA` as tolerancia,
	      				 $cuentaId as cuentaId,
	      				 $objetivo as objetivo
			      FROM `pomapoligonos`
			      WHERE TIPO=2
			      ORDER BY ORDER_ID ";
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'getMisRutas' " . $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
	     return BykomCliente_byk::getResultado($mysqli);
    }
 	/**
 	 * Dada una ruta,
 	 * Retorna todos los puntos de la misma
 	 */
	function misPuntosRutas($rutaId){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'misPuntosRutas' " .  mysqli_connect_error());
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	     }
	     $SQL = " select ORDER_ID,
	     				LATITUD as latitud,
	     				LONGITUD as longitud
				  from `porlpoligonos` where `ORDER_RL`= $rutaId ORDER BY ORDER_ID";

	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'misPuntosRutas' " . $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
	     return BykomCliente_byk::getResultado($mysqli);
    }
	//persiste un objeto del tipo "MisRutas" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id
    //si es que fallo al intentar realizar la operacion
	function PersistirRuta($object){
		global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirRutaOZona' " . mysqli_connect_error() );
		   	$object->id=-1;
	       	return ($object);
	     }
		 //POMAPOLIGONOS
		 $SQL = "";
		 $colorDec = hexdec($object->color); //convertimos el color de HEXA a DECIMAL
		 if (($object->id=='')||($object->id==null)){ //ES UN INSERT
			//inserto en POMAPOLIGONOS
		 	$SQL = "INSERT INTO `pomapoligonos` (`NOMBRE`, `DATOS`, `COLOR`, `TIPO`,`TOLERANCIA`) ";
			$SQL .= "VALUES ('$object->nombre', '$object->descripcion', $colorDec, 2,$object->tolerancia);";
		 } else{
		 	$SQL = "UPDATE `pomapoligonos` SET ";
			$SQL .= "pomapoligonos.`NOMBRE`='$object->nombre', ";
			$SQL .= "pomapoligonos.`DATOS`='$object->descripcion', ";
			$SQL .= "pomapoligonos.`COLOR`=$colorDec, ";
			$SQL .= "pomapoligonos.`TOLERANCIA`=$object->tolerancia ";
			$SQL .= " WHERE pomapoligonos.`ORDER_ID` = $object->id";
		 }
		 //EJECUTO EL PRIMER QUERY
		 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
	     if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRutaOZona' " .$mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $object->id=-1;
	       return ($object);
	     }
		 if (($object->id=='')||($object->id==null)) //fue un insert
		 	$object->id=$mysqli->insert_id;
	
		 //PUMAPUNTOS
		 $SQL = "DELETE FROM `porlpoligonos` WHERE porlpoligonos.`ORDER_RL`=$object->id";
		 if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRutaOZona' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $object->id=-1;
	       return ($object);
	     }
		 $SQL = "INSERT INTO `porlpoligonos` (`ORDER_RL`, `LATITUD`, `LONGITUD`) VALUES ";
		 for ($i=0; $i<$object->cantidadPuntos(); $i++){
		    $lat = $object->PUNTOSLAT[$i];
			$lng = $object->PUNTOSLNG[$i];
			$SQL .= "($object->id, '$lat', '$lng')";
			if ($i<$object->cantidadPuntos()-1)
				$SQL.=",";
		 }
		 
		 if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRutaOZona' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $object->id=-1;
	       return ($object);
	     }
	
		 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA => PERSISTO LOS CAMBIOS
		 $mysqli->close();
	     return ($object);
    }

    function VerificaRegla($identificador,$tipoRegla){
    	global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'VerificaRegla' " . mysqli_connect_error() );
            printf("Conexion fallida: %s\n", mysqli_connect_error());
            exit();
        }
        switch ((int)$tipoRegla){
        	case 0:	$tabla 	= "abrlpoligonos";
        			$campoFk= "ID_POLIGONO"; 
        			break; 
        	case 1:	$tabla 	= "abrlpuntos";  
        			$campoFk= "ID_PUNTO";
        			break; 
        	case 2:	$tabla 	= "abrlrutas";  
        			$campoFk= "RUTA_ID";
        			break; 
        }
        $SQL = "SELECT ORDER_ID FROM $tabla WHERE $campoFk IN ($identificador)";
        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'VerificaRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente_byk::getResultado($mysqli);
     }
     /**
      * elimina todas las rutas de la base de datos que esten en el array de Ids y retorna True en caso de exito
      */
	 function EliminarRutas($Ids,$cuentaId,$objetivo){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	     if (mysqli_connect_errno()) {
	     	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarRutas' " . mysqli_connect_errno() );
	        return (false);
	     }
		 if (($Ids!=null)and($Ids!='')){
		 	$SQL = "DELETE FROM porlpoligonos WHERE porlpoligonos.`ORDER_RL` IN  (".implode(',',$Ids).")";
		 }
		 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
	     if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarRutas' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       return (false);
	     }
		 if(($Ids!=null)and($Ids!='')){
		 	$SQL = "DELETE FROM pomapoligonos WHERE pomapoligonos.`ORDER_ID` IN  (".implode(',',$Ids).") AND pomapoligonos.TIPO=2";
		 }
		 if(!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarRutas' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       return (false);
	     }
		 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
		 $mysqli->close();
	     return (true);
    }
    /**
     * 
     * Persiste un objeto del tipo "Regla" en la base de datos y lo retorna con el nuevo ID o bien con un -1 
     * como id si es que fallo al intentar realizar la operacion
     * @param Regla $Regla
     */
 	function PersistirRegla($Regla){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . mysqli_connect_error() );
		   $Regla->id=-1;
	       return ($Regla);
	     }
	     
 		for ($i=0; $i<$Regla->cantidadFranjas(); $i++){
	   		$franja = $Regla->FRANJAS[$i];
			$horaIni = $franja[7];
			$horaFin = $franja[8];
			$dias = "";
			$comma = "";
	     	if((int)$Regla->tipoRegla==2){//rutas
				$horaIni = dateToMYSQL($franja[0],true);
				$horaFin = dateToMYSQL($franja[1],true);
	     	}else{
				for ($j=1; $j<7; $j++){//lunes a sabado
					if(trim($franja[$j])=="true"){
					    $dias .= $comma."1";
					}else{
					    $dias .= $comma."0";
					}
					$comma = ",";
				}
				if(trim($franja[0])=="true"){
					$dias .= $comma."1";
				}else{
					$dias .= $comma."0";
				}
	     	}
	  	 }
	  	 
	  	 if(($Regla->id=='')||($Regla->id==null)){
		    switch ((int)$Regla->tipoRegla){
		     	case 0: $nameTable 	= "abrlpoligonos";
		     			$fields 	= "`NOMBRE`,`ORDER_RL`,`ID_POLIGONO`,`PUEDE_ESTAR`,`FECHAHORA`,`LU`,`MA`,`MI`,`JU`,`VI`,`SA`,`DO`,`DH`,`HH`,`TIPO`";
		     			$values 	= " '".$Regla->nombre."',".$Regla->MOVILES[0].",".$Regla->zona.", ".$Regla->debeEstar.",now(), $dias,'$horaIni','$horaFin',$Regla->tipoCuenta ";  
		     			break;
		     	case 1: $nameTable = "abrlpuntos";
		     			$fields 	= "`NOMBRE`,`ORDER_RL`,`ID_PUNTO`,`FECHAHORA`,`LU`,`MA`,`MI`,`JU`,`VI`,`SA`,`DO`,`DH`,`HH`";
		     			$values 	= "'".$Regla->nombre."', ".$Regla->MOVILES[0].", ".$Regla->zona.", now(), ".$dias.", '".$horaIni."', '".$horaFin."'";  
		     			break;
		     	case 2: $nameTable = "abrlrutas";
		     			$fields 	= "`NOMBRE`,`ORDER_RL`,`RUTA_ID`, `FECHA_DESDE`, `FECHA_HASTA` , `FECHAHORA`";
		     			$values 	= "'".$Regla->nombre."', ".$Regla->MOVILES[0].", $Regla->zona, '$horaIni', '$horaFin', now()";  
		     			break;
		     }
	  	 }else{
	  	 	$vDias = explode(",",$dias);
	  	  	switch( (int)$Regla->tipoRegla ){
		     	case 0: $nameTable 	= "abrlpoligonos"; 
		     			$values 	= "	`NOMBRE`= '".$Regla->nombre."',`ORDER_RL`=".$Regla->MOVILES[0].",`ID_POLIGONO`= $Regla->zona,`PUEDE_ESTAR`=$Regla->debeEstar,
						     			`FECHAHORA`= now(),`LU`=".$vDias[0].",`MA`=".$vDias[1].",`MI`=".$vDias[2].",`JU`=".$vDias[3].",`VI`=".$vDias[4].",`SA`=".$vDias[5].",`DO`=".$vDias[6].",
						     			`DH`='$horaIni',`HH`='$horaFin',`TIPO` = $Regla->tipoCuenta ";
		     			break;
		     	case 1: $nameTable = "abrlpuntos";
		     			$values 	= "`NOMBRE`='$Regla->nombre',`ORDER_RL`=".$Regla->MOVILES[0].",`ID_PUNTO`= $Regla->zona,`FECHAHORA`=now(),
		     							`LU`=".$vDias[0].",`MA`=".$vDias[1].",`MI`=".$vDias[2].",`JU`=".$vDias[3].",`VI`=".$vDias[4].",`SA`=".$vDias[5].",`DO`=".$vDias[6].",
						     			`DH`='$horaIni',`HH`='$horaFin' ";  
		     			break;
		     	case 2: $nameTable = "abrlrutas";
		     			$values 	= "`NOMBRE`='$Regla->nombre',`ORDER_RL`=".$Regla->MOVILES[0].",`RUTA_ID`=$Regla->zona, 
		     							`FECHA_DESDE`='$horaIni', `FECHA_HASTA`='$horaFin' , `FECHAHORA`=now() ";
		     			break;
		     }
	  	 }
		 //REGLA
		 $SQL = "";
		 if (($Regla->id=='')||($Regla->id==null)){ //ES UN INSERT
			//inserto en REGLA
		 	$SQL = "INSERT INTO `$nameTable` ($fields) ";
			$SQL .= "VALUES ($values); ";
		 }else{
		 	$SQL = "UPDATE `$nameTable` SET ";
			$SQL .= " $values ";
			$SQL .= " WHERE $nameTable.`ORDER_ID` = $Regla->id";
		 }
		 //EJECUTO EL PRIMER QUERY
		 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
	     if (!$mysqli->real_query($SQL)){
			$LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " .$mysqli->error.' CONSULTA: '.$SQL);
		   	$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       	$Regla->id=-1;
	       	return ($Regla);
	     }
		 if (($Regla->id=='')||($Regla->id==null)){ //fue un insert
		 	$Regla->id=$mysqli->insert_id;
 		 }
		 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
		 $mysqli->close();
	     return ($Regla);
    }
    /**
     * retorna una lista de reglas
     * @param int $cuenta
     * @param int $objetivo
     */
	function Reglas_Cliente($cuenta, $objetivo){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Reglas_Cliente' " . mysqli_connect_error());
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
	    $SQL = " (select
	    			CONCAT(regla.`ORDER_ID`,'2') as id, regla.`NOMBRE` as nombre, regla.`ORDER_RL` as movilFK, regla.`RUTA_ID` as poligonoFK, 
	    			regla.`FECHA_DESDE` as fechaDesde, regla.`FECHA_HASTA` as fechaHasta, regla.`FECHAHORA` as fechaHora,
	    			1 as debeEstar, null as lu, null as ma, null as mi, null as ju, null as vi,
	    			null as sa, null as do, DATE_FORMAT(regla.`FECHA_DESDE`,'%H:%i')  as horaInicio, DATE_FORMAT(regla.`FECHA_HASTA`,'%H:%i') as horaFin, null as tipo,
	    			2 as tipoRegla, $cuenta as flotaId, $objetivo as esFlota, null as tolerancia
	    			from abrlrutas regla )
	   			 UNION 
	    		 (select
	    			CONCAT(regla.`ORDER_ID`,'0') as id, regla.`NOMBRE` as nombre, regla.`ORDER_RL` as movilFK, regla.`ID_POLIGONO` as poligonoFK, 
	    			null as fechaDesde, null as fechaHasta, regla.`FECHAHORA` as fechaHora,
	    			regla.`PUEDE_ESTAR` as debeEstar, regla.LU as lu, regla.MA as ma, regla.MI as mi, regla.JU as ju, regla.VI as vi,
	    			regla.SA as sa, regla.DO as do, regla.DH as horaInicio, regla.HH as horaFin, regla.TIPO as tipo,
	    			0 as tipoRegla, $cuenta as flotaId, $objetivo as esFlota, null as tolerancia
	    			from abrlpoligonos regla)
				UNION
				(select 
					CONCAT(regla.`ORDER_ID`,'1') as id, regla.`NOMBRE` as nombre, regla.`ORDER_RL` as movilFK, regla.`ID_PUNTO` as poligonoFK, 
	    			null as fechaDesde, null as fechaHasta, regla.`FECHAHORA` as fechaHora,
	    			1 as debeEstar, regla.LU as lu, regla.MA as ma, regla.MI as mi, regla.JU as ju, regla.VI as vi,
	    			regla.SA as sa, regla.DO as do, regla.DH as horaInicio, regla.HH as horaFin, null as tipo,
	    			1 as tipoRegla, $cuenta as flotaId, $objetivo as esFlota, null as tolerancia
	    			from abrlpuntos regla) ";
	    
	    if (!$mysqli->real_query($SQL)){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Reglas_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
	       	exit();
	    }
	    return BykomCliente_byk::getResultado($mysqli);
	}
 
	/**
	 * 
	 * elimina todas las reglas de la base de datos que esten en el array de Ids y retorna True en caso de exito
	 * @param string $Ids
	 */
	function EliminarReglas($Ids,$tipoRegla){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	     if (mysqli_connect_errno())  {
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . mysqli_connect_errno());
	       	return (false);
	     }
	
		 if (($Ids!=null)and($Ids!='')){
		 	switch((int)$tipoRegla ){
		     	case 0: $nameTable 	= "abrlpoligonos"; 
		     			break;
		     	case 1: $nameTable = "abrlpuntos";
		     			break;
		     	case 2: $nameTable = "abrlrutas";
		     			break;
		     }
		    //REGLAS
		 	$SQL = "DELETE FROM `$nameTable` WHERE $nameTable.`ORDER_ID` IN  (".implode(',',$Ids).")";
		 }
		 if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       return (false);
	     }
		 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
		 $mysqli->close();
	     return (true);
    }
    
    /**
     * 
     * Devuelve la informacion referente al evento
     * @param int $iEventoId
     */
    function consultarEventoMonitoreado($iEventoId){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, "bykom", PORT);
	    if (mysqli_connect_errno())  {
	    	$LOGGER->addLine('ERROR',"FUNCION: 'consultarEventoMonitoreado' " . mysqli_connect_errno());
	       	return (false);
	    }
	    
	    $SQL = "SELECT  evt.ORDER_ID as idEvto,	 evt.FECHAHORA as fechaHora,evt.PROCESADO as procesado, evt.DETALLE as detalle, abma.ID_CL as idCl ,
	    		 abma.ORDER_ID as idCuenta, abma.OBJETIVO as objetivoCuenta, alma.PRIORIDAD as prioridad,
	    		 abma.NOMBRE as nombre, abrl.MOVIL_ENV as movilAsignado, posi.LATITUD as latitudMovilAsignado,
	    		 posi.LONGITUD as longitudMovilAsignado, moma.NOMBRE as nombreMovilAsignado, moma.ABO_ID as aboId
	    		 FROM
	    		 evmatemporal evt
	    		 INNER JOIN almacodigos alma ON evt.EVENTO = alma.ORDER_ID
	    		 INNER JOIN abmacodigos abma ON evt.ORDER_RL = abma.ORDER_ID
	    		 INNER JOIN abrlestados abrl ON abma.ORDER_ID = abrl.ORDER_RL
	    		 LEFT OUTER JOIN momamovil moma ON abrl.MOVIL_ENV = moma.ORDER_ID
	    		 LEFT OUTER JOIN posi_actual posi ON moma.ABO_ID = posi.ORDER_RL
					 WHERE  evt.ORDER_ID = $iEventoId limit 1
	    	UNION
	    		SELECT evt.ORDER_ID as idEvto, evt.FECHAHORA as fechaHora,evt.PROCESADO as procesado, evt.DETALLE as detalle, abma.ID_CL as idCl ,
	    		 abma.ORDER_ID as idCuenta, abma.OBJETIVO as objetivoCuenta, alma.PRIORIDAD as prioridad,
	    		 abma.NOMBRE as nombre, abrl.MOVIL_ENV as movilAsignado, posi.LATITUD as latitudMovilAsignado,
	    		 posi.LONGITUD as longitudMovilAsignado, moma.NOMBRE as nombreMovilAsignado, moma.ABO_ID as aboId
	    		 FROM
	    		 evmatemporal evt
	    		 INNER JOIN almacodigos alma ON evt.EVENTO = alma.ORDER_ID
	    		 INNER JOIN abmacodigos abma ON evt.ORDER_RL = abma.ORDER_ID
	    		 INNER JOIN abrlestados abrl ON abma.ORDER_ID = abrl.ORDER_RL
	    		 LEFT OUTER JOIN momamovil moma ON abrl.MOVIL_ENV = moma.ORDER_ID
	    		 LEFT OUTER JOIN posi_actual posi ON moma.ABO_ID = posi.ORDER_RL
	    		 #WHERE evt.ORDER_ID = $iEventoId LIMIT 1
	    		 WHERE  (select evt2.ORDER_RL from evmatemporal evt2 
							WHERE evt2.ORDER_ID = 40269 limit 1 ) = evt.ORDER_RL
						AND evt.ORDER_ID <> $iEventoId
						AND evt.PROCESADO <> 1
	    		 ";
		if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'consultarEventoMonitoreado' " . $mysqli->error.' CONSULTA: '.$SQL);
	       return (false);
	    }
	    return BykomCliente_byk::getResultado($mysqli);
    }
}
?>